/**
 * 地图 api v2.0
 * 显示指定区域 隐藏其他区域
 *
 *
 */
var option_ = {
    // 地图id
    id: "allmap",
    //行政区域边线边框厚度
    fillOpacity: 0.9,
    //行政区域边线颜色
    strokeColor: "#020202",
    //隐藏区域颜色
    fillColor: "#3a65cb",
    //地图POI 点击信息
    enableMapClick: false,
    //百度地图 样式id
    styleId: 'a90623b4ac9146a6e5381b6fa7c8cd3a',
    //设置地图最小级别
    minZoom: 8,
    //设置地图最大级别
    maxZoom: 18,
    //区域点击事件
    click: false,
    //点击监听 事件
    addEventListener: false,
    //区域标签
    centerlabel: false,
    //比例尺控件位置 top、left、right
    navigation: 'left',
    //添加滚轮缩放
    enableScrollWheelZoom: true,
    //双击放大
    enableDoubleClickZoom: true,
    //限定显示区域
    areaRestriction: true,
    //初始化城市
    currentCity: '北京',
    //城市统计数据
    citysList: [],
    //城市列表
    showCitys: ['河北', '山西', '辽宁', '吉林', '黑龙江', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '天津', '北京'
        , '银川', '长春', '海南', '四川省', '重庆', '兰州', '贵州省', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', '宁夏', '新疆'],
};
//坐标验证
var regx = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)+,(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)+$/;
//获取输入框坐标
var selectPoint = $("#coordinates input").val();


var blist = [];
var districtLoading = 0;
var map;
(function ($) {
    $.extend({
        baidu: {
            /**
             * 初始化地图
             * @param opt
             */
            init: function (opt) {
                option_ = $.extend(option_, opt);

                //修改 经纬度位置
                if (opt.userDeptCoordinates != undefined && opt.userDeptCoordinates != null && opt.userDeptCoordinates != '') {
                    let point = $.baidu.getHospitalPoint(opt.userDeptCoordinates)
                    console.log(point)
                    option_.userDeptCoordinates = point.lat + ',' + point.lng
                }

                console.log(option_)
                //初始化地图
                map = new BMap.Map(option_.id,
                    {
                        enableMapClick: option_.enableMapClick,
                        minZoom: option_.minZoom,
                        maxZoom: option_.maxZoom
                    }); // 创建地图实例，禁止点击地图底图
                $.baidu.getBoundary(option_.showCitys);
            },
            /**
             *  创建全国地图
             */
            centerNationwide: function () {
                map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
                map.setMinZoom(2);
                map.setMaxZoom(21);

                //初始化城市
                if (option_.currentCity)
                    map.setCurrentCity(option_.currentCity);

                //启用 事件监听
                // $.baidu.enable();

                $.baidu.setMapStyle();
                $.baidu.addMarkerPoint(option_.citysList);
                map.enableScrollWheelZoom();
                $.baidu.add_control({
                    anchor: BMAP_ANCHOR_TOP_LEFT,
                    type: BMAP_NAVIGATION_CONTROL_LARGE,
                    enableGeolocation: false
                });
            },
            /**
             * 多个省份 列表
             * @param ArrayCitys
             */
            getBoundary: function (ArrayCitys) {
                for (let i = 0; i < ArrayCitys.length; i++) {
                    if (ArrayCitys[i] === '中国') {
                        $.baidu.centerNationwide();
                        break;
                    }
                    console.log(ArrayCitys[i])
                    $.baidu.addDistrict(ArrayCitys[i])
                }
            },
            // 获取行政区 区域
            addDistrict: function (districtName) {
                //使用计数器来控制加载过程
                districtLoading++;
                var bdary = new BMap.Boundary();
                bdary.get(districtName, function (rs) {       //获取行政区域
                    var count = rs.boundaries.length; //行政区域的点有多少个
                    if (count === 0) {
                        alert('未能获取当前行政区域：' + districtName);
                        return;
                    }
                    for (var i = 0; i < count; i++) {
                        blist.push({points: rs.boundaries[i], name: districtName});
                    }
                    //加载完成区域点后计数器-1
                    districtLoading--;
                    if (districtLoading == 0) {
                        //全加载完成后画端点
                        $.baidu.drawBoundary();
                    }
                });
            },
            //创建区域 画端点
            drawBoundary: function () {
                //包含所有区域的点数组
                var pointArray = [];
                /* 画遮蔽层的相关方法
                * 思路: 首先在中国地图最外画一圈，圈住理论上所有的中国领土，然后再将每个闭合区域合并进来，并全部连到西北角。
                * 这样就做出了一个经过多次西北角的闭合多边形
                **/
                //定义中国东南西北端点，作为第一层
                var pNW = {lat: 59.0, lng: 73.0}
                var pNE = {lat: 59.0, lng: 136.0}
                var pSE = {lat: 3.0, lng: 136.0}
                var pSW = {lat: 3.0, lng: 73.0}

                //向数组中添加一次闭合多边形，并将西北角再加一次作为之后画闭合区域的起点
                var pArray = [];
                pArray.push(pSE);
                pArray.push(pNE);
                pArray.push(pNW);
                pArray.push(pSW);
                pArray.push(pSE);

                //循环添加各闭合区域
                for (var i = 0; i < blist.length; i++) {
                    //添加多边形层并显示
                    var ply = new BMap.Polygon(blist[i].points, {
                        strokeWeight: 1,
                        strokeColor: option_.strokeColor,
                        fillOpacity: 0.01,
                        fillColor: "#130202"
                    });
                    /**
                     * 添加区域 点击事件
                     */
                    if (option_.click) {
                        //添加显示用标签层
                        var label = new BMap.Label(blist[i].name, {offset: new BMap.Size(20, -10)});
                        label.hide();
                        map.addOverlay(label);
                        ply.name = blist[i].name;
                        ply.label = label;
                        ply.addEventListener("click", click);

                        ply.addEventListener("mouseover", mouseover);
                        ply.addEventListener("mouseout", mouseout);
                        ply.addEventListener("mousemove", mousemove);
                    }
                    /**
                     * 添加名称标签层
                     */
                    if (option_.centerlabel) {
                        var centerlabel = new BMap.Label(blist[i].name, {offset: new BMap.Size(0, 0)});
                        centerlabel.setPosition(ply.getBounds().getCenter());
                        map.addOverlay(centerlabel);
                    }

                    map.addOverlay(ply);

                    //将点增加到视野范围内
                    var path = ply.getPath();
                    pointArray = pointArray.concat(path);
                    //将闭合区域加到遮蔽层上，每次添加完后要再加一次西北角作为下次添加的起点和最后一次的终点
                    pArray = pArray.concat(path);
                    pArray.push(pArray[0]);
                }

                /**
                 * 限定显示区域
                 */
                if (option_.areaRestriction) {
                    var sw = {lat: 72.92242048747997, lng: 2.7943869769570355}//西南角
                    var ne = {lat: 135.8411756950637, lng: 58.98718173994378}//东北角

                    var b = new BMap.Bounds(new BMap.Point(sw.lat, sw.lng), new BMap.Point(ne.lat, ne.lng));
                    BMapLib.AreaRestriction.setBounds(map, b);

                    //限定显示区域，需要引用api库
                    // var boundply = new BMap.Polygon(pArray);
                    //限制区域范围
                    // BMapLib.AreaRestriction.setBounds(map, boundply.getBounds());
                }

                map.setViewport(pointArray);    //调整视野

                //添加遮蔽层
                var plyall = new BMap.Polygon(pArray, {
                    strokeOpacity: 0.0000001,
                    strokeColor: "#4e0fc7",
                    strokeWeight: 0.00001,
                    fillColor: option_.fillColor,
                    fillOpacity: option_.fillOpacity
                }); //建立多边形覆盖物
                map.addOverlay(plyall);
                //添加控件
                $.baidu.add_control();
                //添加标注
                if (option_.citysList)
                    $.baidu.addMarkerPoint(option_.citysList);
                $.baidu.enable();
                $.baidu.setMapStyle();
            },
            //标注 添加详细信息
            addMarkerDataHtml: function (h) {
                // console.log("h:", h)
                let point = $.baidu.getHospitalPoint(h)
                //拼接 api 跳转连接

                let url = "";
                if (option_.userDeptCoordinates != undefined && option_.userDeptCoordinates != null && option_.userDeptCoordinates != '') {
                    //带起点导航路线的位置导航
                    url = 'http://api.map.baidu.com/direction?origin=name:' + option_.startingPosition + '|latlng:' + option_.userDeptCoordinates + '&region=河北&destination=name:' + h.hospital_name + '|latlng:' + point.lat + ',' + point.lng + '&mode=driving&coord_type=bd09ll&output=html&src=webapp.baidu.openAPIdemo'
                } else {
                    //只有标记的地图跳转骶椎
                    url = 'http://api.map.baidu.com/marker?location=' + point.lat + ',' + point.lng + '&title=到这里去&content=' + h.hospital_name + '&zoom=19&output=html&src=webapp.baidu.openAPIdemo';
                }
                // console.log("l:", option_.userDeptCoordinates)

                //缺少 起点 终点省份
                return "<div>" +
                    "<div style='display: inline-block;width: 100%;'>" +
                    "<h4 style='margin:0 0 5px 0;padding:0.2em 0;display: inline-block;'>" + h.hospital_name + "</h4>" +
                    "<a style='float: right;text-decoration: underline;' target='_blank' href='" + url + "'>到这里去</a></div>" +
                    // "<img style='float:right;margin:4px' id='imgDemo' src='http://lbsyun.baidu.com/jsdemo/img/tianAnMen.jpg' width='139' height='104' title='天安门'/>" +
                    "<div style='margin:0;line-height:1.5;font-size:13px;text-indent:1em'>" +
                    "<p>医废总重量：" + h.sum_value + " kg</p>" +
                    "<p>医废总数量：" + h.sum_bag + " 袋</p>" +
                    "<p>医废当日总重量：" + h.day_sum_value + " kg</p>" +
                    "<p>医废当日总数量：" + h.day_sum_bag + " 袋</p>" +
                    "</div>";
            },
            //添加 地点标注 多个坐标
            addMarkerPoint: function (hospitals) {
                // if (hospitals == undefined || hospitals == null || hospitals == "") {
                //     hospitals = option_.citysList
                // }

                //icon 图标
                var myIcon = new BMap.Icon("/visual/images/1122241.gif", new BMap.Size(30, 30), { //图片大小
                    anchor: new BMap.Size(10, 25),  //标注相对point的偏移位置
                });
                myIcon.setImageSize(new BMap.Size(30, 30)); //重点重点，设置图片大小
                for (var i = 0; i < hospitals.length; i++) {

                    let HospitalPoint = $.baidu.getHospitalPoint(hospitals[i]);

                    if (HospitalPoint != null) {
                        var point = new BMap.Point(HospitalPoint.lng, HospitalPoint.lat);
                        var marker = new BMap.Marker(point, {icon: myIcon});
                        map.addOverlay(marker);
                        let sContent = $.baidu.addMarkerDataHtml(hospitals[i])
                        //标注点击 触发按钮
                        marker.addEventListener("click", function () {
                            var infoWindow = new BMap.InfoWindow(sContent); // 创建信息窗口对象
                            this.openInfoWindow(infoWindow); //开启信息窗口
                            //图片加载完毕重绘infowindow
                            // document.getElementById('imgDemo').onload = function () {
                            //     infoWindow.redraw(); //防止在网速较慢，图片未加载时，生成的信息框高度比图片的总高度小，导致图片部分被隐藏
                            // }
                        });
                    }
                }
            },
            //获取医院坐标信息
            getHospitalPoint: function (hospital) {
                let point = hospital.point || hospital
                if (!regx.test(point))
                    return null;
                let h = point.split(',');
                return {
                    lng: h[0],
                    lat: h[1]
                }
            },
            /**
             * 添加百度地图样式 id
             * @param styleId
             */
            setMapStyle: function (styleId, styleJson) {
                if (styleId || option_.styleId)
                    map.setMapStyleV2({
                        styleId: styleId || option_.styleId
                    });
                if (styleJson || option_.styleJson)
                    map.setMapStyle({
                        styleJson: styleJson || option_.styleJson
                    });
            },
            //监听事件
            enable: function () {
                console.log("地图-监听事件打开")
                //单击获取点击的经纬度
                if (option_.addEventListener) {
                    map.addEventListener("click", function (e) {
                        console.log(e.point.lng + "," + e.point.lat);
                    });
                }
                //滚轮缩放
                if (option_.enableScrollWheelZoom)
                    map.enableScrollWheelZoom();
                else
                    map.disableScrollWheelZoom();
                // 启用双击放大，默认启用
                if (option_.enableDoubleClickZoom)
                    map.enableDoubleClickZoom();
                else
                    map.disableDoubleClickZoom();
            },
            //添加缩放比例尺控件
            add_control: function (opt) {
                // anchor:
                // BMAP_ANCHOR_TOP_LEFT	    控件将定位到地图的左上角
                // BMAP_ANCHOR_TOP_RIGHT	控件将定位到地图的右上角
                // BMAP_ANCHOR_BOTTOM_LEFT	控件将定位到地图的左下角
                // BMAP_ANCHOR_BOTTOM_RIGHT	控件将定位到地图的右下角
                //type:
                //BMAP_NAVIGATION_CONTROL_LARGE	    标准的平移缩放控件（包括平移、缩放按钮和滑块）
                // BMAP_NAVIGATION_CONTROL_SMALL	仅包含平移和缩放按钮
                // BMAP_NAVIGATION_CONTROL_PAN	    仅包含平移按钮
                // BMAP_NAVIGATION_CONTROL_ZOOM	    仅包含缩放按钮
                let control = {
                    anchor: BMAP_ANCHOR_TOP_LEFT,
                    type: BMAP_NAVIGATION_CONTROL_LARGE,
                    enableGeolocation: false
                };
                control = $.extend(opt, control);
                // 左上角，添加比例尺
                // if (opt.ScaleControl.show == true) {
                //     var top_left_control = new BMap.ScaleControl(
                //         {anchor: BMAP_ANCHOR_TOP_LEFT});
                // }
                var navigation = new BMap.NavigationControl(control);  //左上角，添加默认缩放平移控件
                map.addControl(navigation);
            }
        }


    })
})(jQuery);


/**
 * 各种鼠标事件绑定
 */
function click(evt) {
    console.log(evt.target.name);
}

function mouseover(evt) {
    evt.target.label.setZIndex(99);
    evt.target.label.setPosition(evt.point);
    evt.target.label.show();
}

function mousemove(evt) {
    evt.target.label.setPosition(evt.point);
}

function mouseout(evt) {
    evt.target.label.hide();
}
